{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 12.1 主成分分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "主成分分析，或者称为PCA，是⼀种被⼴泛使⽤的技术，应⽤的领域包括维度降低、有损数据压缩、特征抽取、数据可视化，也被称为Karhunen-Loève变换。\n",
    "* 数据在低维度线性空间(主自空间)上的投影，且使得投影数据的方差被最大化\n",
    "* 使得数据点与它们投影之间的平均平方距离最小的线性投影"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12.1.1 最大方差形式\n",
    "考虑在⼀维空间(M = 1)上的投影,每个数据点$x_n$被投影到一个标量值$\\mu_1^Tx_n$上，投影后的均值为$\\mu_1^T\\overline x$\n",
    "$$\\overline x=\\frac{1}{N}\\sum_{n=1}^Nx_n$$\n",
    "投影数据的方差为:\n",
    "$$\\frac{1}{N}\\sum_{n=1}{N}\\{\\mu_1^Tx_n-\\mu_1^T\\overline x\\}^2=\\mu_1^TS\\mu_1$$\n",
    "$$S=\\frac{1}{N}\\sum_{n=1}^N（x_n-\\overline x)(x_n-\\overline x)^T$$\n",
    "\n",
    "在归一化条件$\\mu_1^T\\mu_1=1$下最大化投影方差:\n",
    "$$\\mu_1^TS\\mu_1+\\lambda_1(1-\\mu_1^T\\mu_1)$$\n",
    "对$\\mu_1$求导，求得驻点满足:\n",
    "$$S\\mu_1=\\lambda_1\\mu_1$$\n",
    "这说明$\\mu_1$是数据协方差矩阵的一个特征向量,那么特征值为:$\\lambda_1=\\mu_1^TS\\mu_1$\n",
    "推广开来，如果我们考虑M维投影空间的⼀般情形，那么最⼤化投影数据⽅差的最优线性投影由数据协⽅差矩阵$S$的M个特征向量$\\mu_1,...,\\mu_M$定义，对应于M个最⼤的特征值$\\lambda_1,...,\\lambda_M$。所以，主成分分析涉及到计算数据集的均值$\\overline x$和协⽅差矩阵$S$，然后寻找S的对应于M个最⼤特征值的M个特征向量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  12.1.2最小误差形式"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "引入D维基向量的一个完整的单位正交集合${\\mu_i},i=1,...,D$,满足$\\mu_i^T\\mu_j=\\delta_{ij}$\n",
    "每个数据点可以表示为基向量的线性组合$$x_n=\\sum_{i=1}^N\\alpha_{ni}\\mu_i$$\n",
    "这表示在由${\\mu_i}$定义的新坐标系上$\\{x_{n1},...,x_{nD}\\}\\rightarrow \\{\\alpha_{n1},...,\\alpha_{nD}\\}$\n",
    "$$x_n \\cdot u_j=\\sum_{i=1}^N\\alpha_{ni}\\mu_i \\cdot \\mu_j$$\n",
    "$$a_{nj}=x_n^T\\mu_j$$\n",
    "$$x_n=\\sum_{i=1}^D(x_n^T\\mu_i)\\mu_i$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们的⽬标是使⽤限定数量M < D个变量的⼀种表⽰⽅法来近似数据点,M维线性⼦空间可以⽤前M个基向量表⽰,现在将每个数据点近似的写成$$\\tilde x_n=\\sum_{i=1}^M z_{ni}u_i+\\sum_{i=M+1}^D b_i\\mu_i$$\n",
    "\n",
    "其中$z_{ni}$依赖于特定的数据点，$b_i$是一个常数\n",
    "\n",
    "最小化目标为:$$J=\\frac{1}{N}\\sum_{n=1}^N\\lVert x_n-\\tilde x_n\\lVert^2$$\n",
    "\n",
    "对$z_{nj}$求驻点:$$z_{nj}=x_n^T\\mu_j$$\n",
    "对$b_j$求驻点$$b_j=\\overline x^T\\mu_j$$\n",
    "\n",
    "$$x_n-\\tilde x_n=\\sum_{i=M+1}^D\\{(x_n-\\overline x)^T\\mu_i\\}\\mu_i$$\n",
    "\n",
    "J被定义为失真度的度量\n",
    "$$J=\\frac{1}{N}\\sum_{n=1}^N\\sum_{i=M+1}^D(x_n^T\\mu_i-\\overline x^T\\mu_i)^2=\\sum_{i=M+1}^D\\mu_i^TS\\mu_i$$\n",
    "\n",
    "$$\\tilde J=\\mu_2^TS\\mu_2+\\lambda_2(1-\\mu_2^T\\mu_2)$$\n",
    "\n",
    "同样求$\\mu_2$的驻点我们有:$S\\mu_2=\\lambda_2\\mu_2$,将$\\mu_2$代入J中得到$J=\\lambda_2$,于是，我们通过将$\\mu_2$选择为对应于两个特征值中较⼩的那个特征值的特征向量，可以得到J的最⼩值。\n",
    "\n",
    "\n",
    "即为了最⼩化平均平⽅投影距离，我们应该将主\n",
    "成分⼦空间选为穿过数据点的均值并且与最⼤⽅差的⽅向对齐。对于特征值相等的情形，任何\n",
    "主⽅向的选择都会得到同样的J值。\n",
    "$$S\\mu_i=\\lambda_u\\mu_i$$\n",
    "$$J=\\sum_{i=M+1}^D\\lambda_i$$\n",
    "\n",
    "于是，我们可以通过将这些特征向量选择成$D − M$个\n",
    "最⼩的特征值对应的特征向量，来得到J的最⼩值，因此定义了主⼦空间的特征向量是对应\n",
    "于M个最⼤特征值的特征向量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12.1.2 PCA的应用\n",
    "* 数据压缩\n",
    "* 数据预处理，标准化数据集\n",
    "标准化的数据集的协方差矩阵元素为:\n",
    "$$\\rho_{ij}=\\frac{1}{N}\\sum_{n=1}^N\\frac{(x_{ni}-\\overline x_i)}{\\sigma_i}\\frac{(x_{nj}-\\overline x_j)}{\\sigma_j}$$\n",
    "然⽽，使⽤PCA，我们可以对数据进⾏更显著的归⼀化，得到零均值和单位⽅差的数据，从\n",
    "⽽不同的变量之间的相关性关系被消除。\n",
    "特征向量方程为:$$\\mathbf{SU}=\\mathbf{LU}$$其中$\\mathbf L$为$DXD$对角矩阵，$\\mathbf U $为$DXD$正交矩阵\n",
    "对每个数据点数据点$x_n$，应用一个变换$$y_n=L^{-\\frac{1}{2}}U^T(x_n-\\overline x)$$集合${y_n}$的均值为0,协方差为单位矩阵，该操作也被称为对数据的白化。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(r\"../\")\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn import datasets\n",
    "%matplotlib inline\n",
    "\n",
    "from prml.feature_extractions import Autoencoder, BayesianPCA, PCA\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f713c532978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "iris = datasets.load_iris()\n",
    "pca = PCA(n_components=2)\n",
    "Z = pca.fit_transform(iris.data)\n",
    "plt.scatter(Z[:, 0], Z[:, 1], c=iris.target)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12.1.4 高维数据的PCA\n",
    "N个数据点，D维空间，将$\\mathbf X$定义为(NxD)维中心数据矩阵，第n行为$(x_n-\\overline x)$,特征向量方程为:$$\\frac{1}{N}=\\mathbf X^T\\mathbf X\\mu_i=\\lambda_i\\mu_i$$\n",
    "$$\\frac{1}{N}=\\mathbf {XX^T}(\\mathbf X\\mu_i)=\\lambda_i(\\mathbf X\\mu_i)$$\n",
    "现在定义$\\nu_i=\\mathbf X\\nu_i$:\n",
    "$$\\frac{1}{N}\\mathbf {XX^T}\\nu_i=\\lambda_i\\nu_i$$\n",
    "这个矩阵与原始的协⽅差矩阵具有相同的N − 1个特征值，原始的协⽅差矩阵本⾝有额外的D − N + 1个值为零的特征值，可以先计算$\\mathbf{XX^T}$的特征向量$\\nu_i$\n",
    "再进行归一化:\n",
    "$$\\mu_i=\\frac{1}{(N\\lambda_i)^{\\frac{1}{2}}}\\mathbf X^T\\nu_i$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
